Laravel 5でAPIをつくる
Laravel_5でAPIを作る際の情報
最も簡単なAPI
routes/api.phpにルーティングを定義する
例:https://github.com/laravel/laravel/blob/1f0640f99d045ca2eeec7c87a5c6644c197f466b/routes/api.php#L16
より込み入ったことをやる場合にはControllerに処理を切り出したくなる(関心の分離)
MiddlewareをControllerのメソッド全てに一括して設定できる
Controllerをつくる
公式:Controllers - Laravel - The PHP Framework For Web Artisans
知見
公式docのSpecifying The Resource Modelにある通り、idなどを受け取る代わりに、idでfind()した結果のEloquentをDIすることができる(すごい)
code:php
public function show(int $id) // の代わりに
public function show(TweetEloquent $tweet) {} // idで解決されたEloquentを使うことができる
簡単なアプリを作るときは便利かもしれない
少し大きなアプリをつくるならRepositoryから引くだろうからこの機能は使わない
JSONで返したい。レスポンスを作りたい
(簡単な方法)ヘルパメソッドを使う
HTTP Responses - Laravel - The PHP Framework For Web Artisans
API Resourcesを使う
Eloquent: API Resources - Laravel - The PHP Framework For Web Artisans
コントローラでEloquentをつかうなら便利そうkadoyau.icon
バリデーションがしたい
パスパラメータにはmiddlewareでバリデーションができる
クエリパラメータでもできる?未調査
クエリパラメータではValidateorが使える
Validation - Laravel - The PHP Framework For Web Artisans
使えるルール一覧:Validation - Laravel - The PHP Framework For Web Artisans
IntelliJで補完が効かなくてつらい><
バリデーションが失敗したときのエラー
Validation - Laravel - The PHP Framework For Web Artisans
外部向けのAPIを作る際には認証をしたいときもある
→Laravel Passportを使う
api/以下にリクエストしてるのにjsonじゃなくてHTMLが帰ってくる
Acceptヘッダを追加するとエラー時もJSONで返る
curl -H "accept: application/json"
Use always JSON for error responses for /api/* calls
Middlewareでaccept headerをつける解決策